﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SisCRA.Config;

namespace SisCRA.Forms
{
    public partial class FormDatabase : Form
    {
        #region -Constructor-

        /// <summary>
        /// Construtor padrão.
        /// </summary>
        public FormDatabase()
        {
            InitializeComponent();
            LoadDatabaseData();
        }

        #endregion

        #region -Events-

        private void textBoxPort_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (!(Char.IsNumber(e.KeyChar) || Char.IsControl(e.KeyChar)))
            {
                e.Handled = true;
            }
        }

        private void buttonSave_Click(object sender, EventArgs e)
        {
            string server = this.textBoxServer.Text;
            string port = this.textBoxPort.Text;
            string user = this.textBoxUser.Text;
            string password = this.textBoxPassword.Text;

            try
            {
                if (string.IsNullOrWhiteSpace(server) || string.IsNullOrWhiteSpace(port) || string.IsNullOrWhiteSpace(user) || string.IsNullOrWhiteSpace(password))
                {
                    MessageBox.Show(this, "Existem campos inválidos!", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
                else
                {
                    DatabaseConfig.MakeDatabaseConfig(server, port, user, password);

                    if (DatabaseConfig.TestConnection())
                    {
                        MessageBox.Show(this, "Configurações salvas com sucesso!", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information);
                        this.Dispose();
                    }
                    else
                    {
                        MessageBox.Show(this, "Servidor de banco de dados não encontrado.\r\nPor favor, verifique se esta conexão é válida.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        this.textBoxServer.Focus();
                    }
                }
            }
            catch (Exception ex)
            {
                Log.Instance.Error(ex);
                MessageBox.Show(this, "Falha ao salvar configurações de banco de dados.", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void buttonCancel_Click(object sender, EventArgs e)
        {
            this.Dispose();
        }

        #endregion

        #region -Private Methods-

        /// <summary>
        /// Carrega as informações de banco de dados do arquivo App.config.
        /// </summary>
        private void LoadDatabaseData()
        {
            this.textBoxServer.Text = AppConfig.ReadConfiguration(AppConfig.Server);
            this.textBoxPort.Text = AppConfig.ReadConfiguration(AppConfig.Port);
            this.textBoxUser.Text = AppConfig.ReadConfiguration(AppConfig.User);
            this.textBoxPassword.Text = AppConfig.ReadConfiguration(AppConfig.Password);
        }

        #endregion
    }
}
